package top.whysu.rongcloud.service;

import top.whysu.rongcloud.dto.rongcloud.groups.*;
import top.whysu.rongcloud.po.RongCloudGroupMemberPO;
import top.whysu.rongcloud.po.RongCloudGroupsPO;

import java.math.BigDecimal;
import java.util.List;

public interface RongCloudGroupsService {
    /**
     * 获取群组信息
     *
     * @param groupId 群ID
     * @return
     * @author whysu @2021-03-17 10:14
     */
    RongCloudGroupsPO selectGroupInfoById(BigDecimal groupId);

    /**
     * 创建群组
     *
     * @param groupsCreateDTO 请求参数
     * @return 群组信息（主要是id，群名称，群头像）
     */
    RongCloudGroupsPO wholeCreateGroups(GroupsCreateDTO groupsCreateDTO);

    /**
     * 添加群成员
     *
     * @param groupsAddDTO 请求参数
     * @author @2021-03-16 15:11
     */
    void wholeAdd(GroupsAddDTO groupsAddDTO);

    /**
     * 用户加入群组
     *
     * @param groupsJoinDTO 请求参数
     * @author @2021-03-16 15:43
     */
    void wholeJoin(GroupsJoinDTO groupsJoinDTO);

    /**
     * 群主或管理员将群成员移出群组
     *
     * @param groupsKickDTO 请求参数
     * @author whysu @2021-03-16 20:15
     */
    void wholeKick(GroupsKickDTO groupsKickDTO);

    /**
     * 退出群组
     *
     * @param groupsDTO 请求参数
     * @author whysu @2021-03-16 20:54
     */
    void wholeQuit(GroupsDTO groupsDTO);

    /**
     * 修改群名称、群公告、群头像
     *
     * @param groupsModifyDTO 请求参数
     * @author whysu @2021-03-16 21:08
     */
    void wholeModifyGroups(GroupsModifyDTO groupsModifyDTO);

    /**
     * 修改群名片（备注）
     *
     * @param groupsEntity
     * @return void
     * @author whysu @2021-03-17 8:46
     */
    void wholeModifyDisplayName(GroupsDisplayNameDTO groupsDisplayNameDTO);

    /**
     * 获取当前用户账号的所有群组
     *
     * @param userAccount 当前用户账号
     * @return 用户所拥有的
     * @author whysu @2021-03-17 8:54
     */
    List<RongCloudGroupsPO> getGroupList(String userAccount);

    /**
     * 获取群组的所有成员
     *
     * @param groupId 群组ID
     * @return 所有群成员
     * @author whysu @2021-03-17 9:36
     */
    List<RongCloudGroupMemberPO> getMemberList(BigDecimal groupId);

    /**
     * 解散群组
     *
     * @param userAccount 当前用户账号（只有群主可以解散群）
     * @param groupId     群ID
     * @author whysu @2021-03-17 9:55
     */
    void wholeDismiss(String userAccount, BigDecimal groupId);

}
